Welcome to django!

8.03 创建模型类

创建模型类之前需要配置好使用那个数据库

指定数据库,使用orm需要在配置文件中指定使用哪个库

创建模型类:

在django中创建模型非常简单(django内部做了很多工作,使用者只需要简单调用即可),使用的时候,只经继承模型基类,然后定义字段即可,这部份代码写在每个应用下面的mode.py文件内。

模型类都要继承models.Model

类下面的每个字段都对应数据库中的表字段及其字段类型,约束条件等。


1、在django上创建app08

在终端输入以下命令行:

Python .\manage.py startapp app08

2、 在settings设置应用配置

在django=>shn=>shn=>sttings.py下面设置配置文件

1)在

from pathlib import Path


后面插入:

import pymysql

pymysql.install_as_MySQLdb()


2)在instlled_apps里面注册app08

INSTALLED_APPS = [

"app08",


3)在database里面配置模块驱动参数:

DATABASES = {

#'default': {

#'ENGINE': 'django.db.backends.sqlite3',

#'NAME': BASE_DIR / 'db.sqlite3',

default': {

ENGINE':'django.db.backends.mysql',

NAME':'app08', #在mysql中自己预先创建好数据库app08

USER':'root',

PASSWORD':'502',

HOST':'127.0.0.1',

POST':3306,

CHARSET':'utf8',

}

}


4、 在mysql上创建数据库

mysql> create database app08;

Query OK, 1 row affected (0.02 sec)

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| app08 |

| bms |

| domo |

| first_database |

| information_schema |

| mysql |

| performance_schema |

| shn |

| sys |

+--------------------+

9 rows in set (0.00 sec)


5、在django上创建数据表的字段

在app08=>models里面创建模型数据:

from django.db import models

# Create your models here.

class User(models.Model) :# class里面做一些继承models.Model Model是一个基类,所有的user都要继承这个基类

id=models.AutoField(primary_key=True) #AutoField是一个自增功能,设置主键

useName=models.CharField(max_length=100)

passWord=models.CharField(max_length=100)

age=models.IntegerField()

birthDay=models.DateTimeField()


5、 在django终端执行命令:

PS D:\Pyobject2023\object\django\shn> python .\manage.py makemigrations

返回结果:

Migrations for 'app08':

app08\migrations\0001_initial.py

- Create model User

PS D:\Pyobject2023\object\django\shn>

上述结果显示:会在app08\migrations\0001_initial.py里面生成一条记录;

0001_initial.py:

# Generated by Django 4.2.11 on 2024-12-01 09:36

from django.db import migrations, models

class Migration(migrations.Migration):

initial = True

dependencies = [

]

operations = [

migrations.CreateModel(

name='User',

fields=[

('id', models.AutoField(primary_key=True, serialize=False)),

('useName', models.CharField(max_length=100)),

('passWord', models.CharField(max_length=100)),

('age', models.IntegerField()),

('birthDay', models.DateTimeField()),

],

),


6、 在django终端执行命令

根据上述记录执行命令如下:

PS D:\Pyobject2023\object\django\shn> python .\manage.py migrate

执行结果:

Operations to perform:

Apply all migrations: admin, app08, auth, contenttypes, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying admin.0002_logentry_remove_auto_add... OK

Applying admin.0003_logentry_add_action_flag_choices... OK

Applying app08.0001_initial... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying auth.0007_alter_validators_add_error_messages... OK

Applying auth.0008_alter_user_username_max_length... OK

Applying auth.0009_alter_user_last_name_max_length... OK

Applying auth.0010_alter_group_name_max_length... OK

Applying auth.0011_update_proxy_permissions... OK

Applying auth.0012_alter_user_first_name_max_length... OK

Applying sessions.0001_initial... OK


7、在mysql查询操作结果:

App08数据库中多了很多表,除了app08_user表,其他表都是Django内置模块需要的表;

mysql> show tables;

+----------------------------+

| Tables_in_app08 |

+----------------------------+

| app08_user |

| auth_group |

| auth_group_permissions |

| auth_permission |

| auth_user |

| auth_user_groups |

| auth_user_user_permissions |

| django_admin_log |

| django_content_type |

| django_migrations |

| django_session |

+----------------------------+

11 rows in set (0.00 sec)

mysql> show columns from app08_user;

+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| id | int | NO | PRI | NULL | auto_increment |

| useName | varchar(100) | NO | | NULL | |

| passWord | varchar(100) | NO | | NULL | |

| age | int | NO | | NULL | |

| birthDay | datetime(6) | NO | | NULL | |

+----------+--------------+------+-----+---------+----------------+

5 rows in set (0.01 sec)


8、 在models里面加入class Meta可以自定义数据名表:

from django.db import models

# Create your models here.

class User(models.Model) :# class里面做一些继承models.Model Model是一个基类,所有的user都要继承这个基类

id=models.AutoField(primary_key=True) #AutoField是一个自增功能,设置主键

useName=models.CharField(max_length=100)

passWord=models.CharField(max_length=100)

age=models.IntegerField()

birthDay=models.DateTimeField()

class Meta:

db_table='user'


9、再操作:python .\manage.py makemigrations

会生成一条记录:

Migrations for 'app08':

app08\migrations\0002_alter_user_table.py

- Rename table for user to user


10、再执行命令:

python .\manage.py migrate


11、查询结果:

mysql> show tables;

+----------------------------+

| Tables_in_app08 |

+----------------------------+

| auth_group |

| auth_group_permissions |

| auth_permission |

| auth_user |

| auth_user_groups |

| auth_user_user_permissions |

| django_admin_log |

| django_content_type |

| django_migrations |

| django_session |

| user |

+----------------------------+

11 rows in set (0.00 sec)